package com.ruoyi.qif.mapper;

import java.util.Date;
import java.util.List;
import com.ruoyi.qif.domain.QifBill;
import org.apache.ibatis.annotations.Param;

/**
 * 琦风公寓-每月账单Mapper接口
 * 
 * @author David
 * @date 2025-10-05
 */
public interface QifBillMapper 
{
    /**
     * 查询琦风公寓-每月账单
     * 
     * @param billId 琦风公寓-每月账单主键
     * @return 琦风公寓-每月账单
     */
    public QifBill selectQifBillByBillId(Long billId);

    /**
     * 查询琦风公寓-每月账单列表
     * 
     * @param qifBill 琦风公寓-每月账单
     * @return 琦风公寓-每月账单集合
     */
    public List<QifBill> selectQifBillList(QifBill qifBill);

    /**
     * 新增琦风公寓-每月账单
     * 
     * @param qifBill 琦风公寓-每月账单
     * @return 结果
     */
    public int insertQifBill(QifBill qifBill);

    /**
     * 修改琦风公寓-每月账单
     * 
     * @param qifBill 琦风公寓-每月账单
     * @return 结果
     */
    public int updateQifBill(QifBill qifBill);

    /**
     * 删除琦风公寓-每月账单
     * 
     * @param billId 琦风公寓-每月账单主键
     * @return 结果
     */
    public int deleteQifBillByBillId(Long billId);

    /**
     * 批量删除琦风公寓-每月账单
     * 
     * @param billIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteQifBillByBillIds(String[] billIds);

    /**
     * 查询全局最大账单编号（用于计算下一个序号）
     * @return 最大编号的数值（如2510001→返回2510001）
     */
    Long selectMaxBillNumber();

    /**
     * 统计账单编号出现次数（用于唯一性校验）
     * @param billNumber 待校验的Long类型编号
     * @return 出现次数（0=不存在，1=已存在）
     */
    int countBillNumber(@Param("billNumber") Long billNumber);

    /**
     * 查询本月账单中去重的交租日
     * @param startDate 本月第一天
     * @param endDate 本月最后一天
     * @return 去重后的交租日列表
     */
    List<Long> selectDistinctRentPayDates(
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );
}
